/**
 * 查找数组对象的某个下标
 * @param {Array} ary 查找的数组
 * @param {Function} fn 判断的方法
 */
export const findIndex = (ary, fn) => {
  if (Array.prototype.findIndex) {
    return ary.findIndex(fn)
  }
  let index = -1
  ary.some((item, i, array) => {
    if (fn(item, i, array)) {
      index = i
      return true
    }
    return false
  })
  return index
}

// 树结构过滤配置
const DEFAULT_CONFIG = {
  id: 'id',
  children: 'children',
  pid: 'pid'
}

const getConfig = (config) => Object.assign({}, DEFAULT_CONFIG, config)

/**
 * 递归过滤树结构
 * @param {Array} tree 要过滤的树
 * @param {Function} func 过滤函数
 * @param {Object} config 配置
 */
export const filter = (tree, func, config = {}) => {
  config = getConfig(config)
  const children = config.children

  function listFilter(list) {
    return list
      .map((node) => ({ ...node }))
      .filter((node) => {
        node[children] = node[children] && listFilter(node[children])
        return func(node) || (node[children] && node[children].length)
      })
  }

  return listFilter(tree)
}

/**
 * 获取 URL 参数 atu 的值，并存 sessionStorage
 */
export const getAtu = () => {
  const urlString = window.location.href
  const atuValue = urlString.match(/atu=([^&]*)/i)
  if (atuValue) {
    sessionStorage.setItem('atuValue', atuValue[1])
    return atuValue[1] // 取得 atu 参数的值
  } else {
    return sessionStorage.getItem('atuValue') || ''
  }
}

/**
 * 获取本地 localStorage 的某个 key 值
 */
export const getCookieValue = (name) => {
  return localStorage.getItem(name) || ''
  // 如要读真实 cookie，可以用下方注释代码
  // const value = `; ${document.cookie}`;
  // const parts = value.split(`; ${name}=`);
  // if (parts.length === 2) return parts.pop().split(';').shift();
}

/**
 * RPN危害类型描述
 */
export const getRPNType = (value) => {
  if (value >= 1 && value <= 50) {
    return value + ',较小危害'
  } else if (value > 50 && value <= 100) {
    return value + ',中等危害'
  } else if (value > 100) {
    return value + ',严重危害'
  } else {
    return '---'
  }
}
